package com.dh.example.netty.service;

import com.dh.example.netty.pojo.WsAuthorize;
import com.dh.example.netty.pojo.response.WsBaseResp;
import io.netty.channel.Channel;

public interface WebSocketService {
    /**
     * 处理登录请求
     * 处理用户登录请求，需要返回一张带code的二维码
     *
     * @param channel 频道
     */
    void handleLoginReq(Channel channel);

    /**
     * 连接
     * 处理所有ws连接的事件
     *
     * @param channel 频道
     */
    void connect(Channel channel);

    /**
     * 已移除
     * 处理ws断开连接的事件
     *
     * @param channel 频道
     */
    void removed(Channel channel);

    /**
     * 授权
     * 主动认证登录
     *
     * @param channel     频道
     * @param wsAuthorize ws授权
     */
    void authorize(Channel channel, WsAuthorize wsAuthorize);

    /**
     * 发送到所有在线
     * 推动消息给所有在线的人
     *
     * @param wsBaseResp 发送的消息体
     */
    void sendToAllOnline(WsBaseResp<?> wsBaseResp);

    /**
     * 发送到uid
     *
     * @param wsBaseResp ws base resp
     * @param uid        uid
     */
    void sendToUid(WsBaseResp<?> wsBaseResp, Long uid);

}
